/*
    Buffer:缓冲区
    是一个类似于数组的存储空间
    Buffer里面的存储是二进制数据
    在计算机的内存里面，8位空间(bit)表示一个字节空间(byte),字节是计算机传输数据的最小单位
    一个字节里面存储的数据的范围是：00000000-11111111  就是十进制的0-255  十六进制的0-ff
    8bit = 1byte
    1024byte = 1kb
    1024kb = 1mb
    1024mb = 1gb
    1024gb = 1tb
*/

let s1 = 'Hello 世界'
// Buffer类型对象的from()方法，用于将一段字符串数据转为Buffer对象进行存储
// Buffer里面保存的都是二进制数据
let bf1 = Buffer.from(s1)
// 显示的时候，二进制数据是以十六进制的形式显示。
console.log(bf1);
console.log(s1.length);    //返回字符串的长度
//返回占用内存空间的长度，注意：在utf-8编码中，一个汉字占3个字节空间
console.log(bf1.length);  

// 采用Buffer()构造函数的方式创建Buffer对象
// 注意：该方式已经被弃用，最好别用这种方式创建
// let bf2 = new Buffer(10)
// console.log(bf2);

// Buffer类型对象的alloc()方法，用分配一段连续的空间
let bf3 = Buffer.alloc(10)
bf3[0] = 55
console.log(bf3[0].toString(2));   //转为二进制输出
console.log(bf3[0].toString(16));  //转为十六进制输入层
bf3[1] = 255
bf3[2] = 256  //注意：一个字节的存储空间是8位，如果存储的数据超过8位，从后往前存储8位数据
bf3[3] = 556
bf3[4] = 0xaa   //如果要直接存储十六进制的数据，采用0x开头
bf3[10] = 55  //注意：Buffer空间分配好之前，就不能再改变大小了
console.log(bf3);

// 采用allocUnsafe()方法新创建的 Buffer 的内容是未知的，可能包含敏感数据
// 一般不推荐使用
let bf4 = Buffer.allocUnsafe(10)
console.log(bf4);


